﻿Imports DTO
Imports BLL

Public Class Produtos
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        'Só carrega se for a primeira vez
        If Not Page.IsPostBack Then
            CarregarCategoria()
        End If
    End Sub
    Sub CarregarCategoria()
        Dim dtoCategoria As New TipoProdutoDTO
        Dim bllCategoria As New TipoProdutoBLL
        Dim novoItem As New ListItem
        Try
            'Essas propriedades podem ser setadas via programação
            'como o exemplo abaixo ou através de configuração na
            'propriedade do objeto.
            ddlCategoria.DataTextField = "pNome"
            ddlCategoria.DataValueField = "pCodigo"

            'Carregar o DropDownList com os grupos
            ddlCategoria.DataSource = bllCategoria.Listar
            ddlCategoria.DataBind()

            'Cria um novo item
            novoItem.Text = "Selecione"
            novoItem.Value = 0

            'Joga o novo item no grupo
            ddlCategoria.Items.Insert(0, novoItem)
            ddlCategoria.SelectedValue = 0
        Catch ex As Exception
            'lblAviso.Text = "Erro ao carregar grupos - " & ex.Message
        Finally
            dtoCategoria = Nothing
        End Try
    End Sub



    Sub CarregarProdutosPorGrupo()
        Dim bllProduto As New ProdutoBLL
        Try
            'Preenche o grid com os produtos
            'DataSource é a propriedade onde definimos qual a fonte de dados
            'DataBind é o método que dispara o carregamento do grid/dropDownList
            grvProdutos.DataSource = bllProduto.ConsultarPorCategoria(ddlCategoria.SelectedItem.Text)
            grvProdutos.DataBind()
        Catch ex As Exception
            'lblAviso.Text = "Erro ao carregar produtos - " & ex.Message
        Finally
            bllProduto = Nothing
        End Try
    End Sub

    Private Sub grvProdutos_RowCommand(sender As Object, e As GridViewCommandEventArgs) Handles grvProdutos.RowCommand
        ' e. CommandName: retorna a propriedade CommandName do botão clicado no Grid
        ' e. CommandArgument retorna: o índice da linha clicada
        ' DirectCast: tenta converter um objeto qualquer num tipo de dado/classe especifico
        If e.CommandName = "Comprar" Then
            Try
                Dim listaCarrinho As List(Of ProdutoDTO)  ' Carrinho
                Dim dtoProduto As New ProdutoDTO
                Dim bllProduto As New ProdutoBLL
                Dim lblProd As Label  ' Label que ira receber a lbl CodProduto do Grid
                Dim dgGrid As GridViewRow  'Aramazena a linha clicada do Grid
                Dim flgExiste As Boolean   'Usada para verificar se um item clicado na linha já esta no carrinho
                'Por padrão toda variavel Boolean criada já recebe o valor 'False'

                '1 - Verificar se já existe uma sessão chamada "carrinho"
                If Session("carrinho") Is Nothing Then 'Se não existir, instanciar a ListaCarrinho
                    listaCarrinho = New List(Of ProdutoDTO)
                Else 'Já existe a sessão
                    listaCarrinho = Session("carrinho")
                End If
                '2 - Obtem a linha clicada
                dgGrid = grvProdutos.Rows(e.CommandArgument) 'Retorna o indice da linha clicada

                '3 - Obtem a label lblCodProduto(template colunm)da linha clicada
                lblProd = DirectCast(dgGrid.FindControl("lblCodProduto"), Label)

                '4 - A partir do codigo do produto, pesquisa na base de dados 
                ' e obtem as informações que irão para o grid da página carrinho.aspx
                dtoProduto = bllProduto.ConsultarPorCodigo(lblProd.Text).Item(0)
                dtoProduto.pQuantidade = 1 'O retorno do método PesquisaPorCódigo é uma lista como a pesquisa foi chave primaria, pegaremos o úndice zero(1º item)

                '5 - Verifica se o produto selecionado já está no carrinho.
                For i = 0 To listaCarrinho.Count - 1
                    If listaCarrinho.Item(i).pCodigo = dtoProduto.pCodigo Then
                        flgExiste = True
                        Exit For
                    End If
                Next

                '6 - Se o produto não estiver no carrinho, adciona o objeto pesquisado
                'no carrinho. Caso contrário, não faz nada.
                If flgExiste = False Then
                    listaCarrinho.Add(dtoProduto)

                    '7 - Atualiza a sessão "carrinho" com o conteúdo da lista Carrinho.
                    Session("carrinho") = listaCarrinho
                End If

                '8 - Redireciona para a página Carrinho.aspx
                Response.Redirect("carrinho.aspx")

            Catch ex As Exception
                ' lblAviso.Text = "Erro ao processar a compra"
            End Try
        End If
    End Sub

    Protected Sub ddlCategoria_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlCategoria.SelectedIndexChanged
        'Carregar os produtos do grupo selecionado
        CarregarProdutosPorGrupo()
    End Sub
End Class